﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using ServicioComunitario2.Logica.Clases;
using ServicioComunitario2.Logica.Excepciones;
using ServicioComunitario2.EnlaceDatos;


namespace ServicioComunitario2.EnlaceDatos.SqlServer
{
    public class SqlPersona
    {

        public bool InsertarPersona(Persona _miPersona)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();


            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[AgregarPersona]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@nombrePer", _miPersona.NombrePersona);
                command.Parameters.AddWithValue("@apellidoPer", _miPersona.ApellidoPersona);
                command.Parameters.AddWithValue("@emailPer", _miPersona.EmailPersona);
                command.Parameters.AddWithValue("@usuarioPer", _miPersona.UsuarioPersona);
                command.Parameters.AddWithValue("@passwPer", _miPersona.PasswordPersona);
                command.Parameters.AddWithValue("@rolPer", _miPersona.IdRol);


                command.Parameters["@nombrePer"].Direction = ParameterDirection.Input;
                command.Parameters["@apellidoPer"].Direction = ParameterDirection.Input;
                command.Parameters["@emailPer"].Direction = ParameterDirection.Input;
                command.Parameters["@usuarioPer"].Direction = ParameterDirection.Input;
                command.Parameters["@passwPer"].Direction = ParameterDirection.Input;
                command.Parameters["@rolPer"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                return true;
            }
            catch (SqlException)
            {
                return false;
            }
            catch (Exception e)
            {
                return false;
            }

             //se cierra la conexion una vez ejecutado el comando.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        public bool ModificarPersona(int numPersona, Persona _miPersona)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();


            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ModificarPersonaBasic]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@nombrePer", _miPersona.NombrePersona);
                command.Parameters.AddWithValue("@apellidoPer", _miPersona.ApellidoPersona);
                command.Parameters.AddWithValue("@emailPer", _miPersona.EmailPersona);
                command.Parameters.AddWithValue("@usuarioPer", _miPersona.UsuarioPersona);
                command.Parameters.AddWithValue("@rolPer", _miPersona.IdRol);
                command.Parameters.AddWithValue("@numPer", numPersona);

                command.Parameters["@nombrePer"].Direction = ParameterDirection.Input;
                command.Parameters["@apellidoPer"].Direction = ParameterDirection.Input;
                command.Parameters["@emailPer"].Direction = ParameterDirection.Input;
                command.Parameters["@usuarioPer"].Direction = ParameterDirection.Input;
                command.Parameters["@rolPer"].Direction = ParameterDirection.Input;
                command.Parameters["@numPer"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                return true;
            }
            catch (SqlException)
            {
                return false;
            }
            catch (Exception e)
            {
                return false;
            }

             //se cierra la conexion una vez ejecutado el comando.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        public Persona DetallePersona(int numPersona)
        {
            Persona personaConsultada = new Persona();
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[DetallesPersonaCompleto]";
                command.CommandTimeout = 10;
                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@idPersona", numPersona);
                command.Parameters["@idPersona"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    personaConsultada.NombrePersona = reader.GetString(0);
                    personaConsultada.ApellidoPersona = reader.GetString(1);
                    personaConsultada.EmailPersona = reader.GetString(2);
                    personaConsultada.UsuarioPersona = reader.GetString(3);
                    personaConsultada.PasswordPersona = reader.GetString(4);

                }

            }
            catch
            {
                return personaConsultada;
            }

            return personaConsultada;
        }


        public Persona DetallePersona(string usuario, string ContraUsuario)
        {
            Persona personaConsultada = new Persona();
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ValidarPersona]";
                command.CommandTimeout = 10;
                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@nomUsuario", usuario);
                command.Parameters.AddWithValue("@passUsuario", ContraUsuario);

                command.Parameters["@nomUsuario"].Direction = ParameterDirection.Input;
                command.Parameters["@passUsuario"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    personaConsultada.NombrePersona = reader.GetString(0);
                    personaConsultada.ApellidoPersona = reader.GetString(1);
                    personaConsultada.EmailPersona = reader.GetString(2);
                    personaConsultada.UsuarioPersona = reader.GetString(3);
                    personaConsultada.PasswordPersona = reader.GetString(4);
                    personaConsultada.RolPersona = reader.GetString(5);

                }

            }
            catch
            {
                return personaConsultada;
            }

            return personaConsultada;
        }


        public List<Persona> ListarTodasPersonas()
        {
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<Persona> miListaPersona = new List<Persona>();

            try
            {
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ListarPersona]";
                command.CommandTimeout = 10;
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Persona miPersona = new Persona();
                    miPersona.IdPersona = reader.GetInt32(0);
                    miPersona.NombrePersona = reader.GetString(1);
                    miPersona.ApellidoPersona = reader.GetString(2);
                    miPersona.EmailPersona = reader.GetString(3);

                    miListaPersona.Add(miPersona);
                }

                return miListaPersona;

            }
            catch (SqlException)
            {
                return miListaPersona;
            }
            finally
            {
                miConexion.CerrarConexionBd();
            }


        }
    }
}